# 编译器
CC=gcc
CXX=g++

# 编译选项
CFLAGS=-I$(SRCDIR)
CXXFLAGS=-std=c++17 -I$(SRCDIR) # 添加 C++17 支持
JSONCPP_FLAGS = -I/usr/include/jsoncpp

# 链接选项，添加 -lpthread 以链接 POSIX 线程库
# 如果需要 -lstdc++fs（比如在旧版本GCC中），可以保留在这里
LDFLAGS=-lpthread -ljsoncpp -lstdc++fs

# 目标可执行文件
TARGET=myapp

# 源文件目录
SRCDIR=src

# 源文件列表
SOURCES=$(SRCDIR)/main.cpp

# C++源文件列表
CPPSOURCES=$(wildcard $(SRCDIR)/logger/*.cpp) \
			$(wildcard $(SRCDIR)/utils/*.cpp) \
			$(wildcard $(SRCDIR)/session/*.cpp)

# 对象文件列表（C和C++）
CPPOBJECTS=$(SOURCES:.cpp=.o) $(CPPSOURCES:.cpp=.o)

# 默认目标
all: $(TARGET)

# 链接目标
$(TARGET): $(CPPOBJECTS)
	$(CXX) -o $@ $^ $(LDFLAGS)

# 从 .c 生成 .o 的规则
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# 特定文件的编译规则
src/utils/EventController.o: src/utils/EventController.cpp
	$(CXX) $(CXXFLAGS) $(JSONCPP_FLAGS) -c $< -o $@

src/utils/ByteStreamHandler.o: src/utils/ByteStreamHandler.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@ # 移除了 $(LDFLAGS)

# 从 .cpp 生成 .o 的规则
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 清理编译产物的规则
clean:
	#rm -f $(SRCDIR)/*/*.o $(TARGET) \
	rm -f $(COBJECTS) $(CPPOBJECTS) $(TARGET)

.PHONY: all clean
